import sys
from loguru import logger
from core.Config import settings
from zoneinfo import ZoneInfo  # Python 3.9+

def formatter(record):
    # 获取记录中的时间，并转换为上海时区格式
    shanghai_time = record["time"].astimezone(ZoneInfo("Asia/Shanghai"))
    formatted_time = shanghai_time.strftime('%Y-%m-%d %H:%M:%S')
    
    # 将格式化后的时间加入到日志记录的 `extra` 字段中
    record['extra']['formatted_time'] = formatted_time

    # 自定义日志格式
    format_str = "{extra[formatted_time]} | {level} | {message} | {extra[application]}"
    return format_str.format(**record)

# 设置控制台日志级别为 INFO
logger.add(sys.stdout, level=settings.LOG_LEVEL, format=formatter)

logger.add(
    settings.BACK_ADMIN_LOG_PATH,                # 日志文件路径，可以包含时间格式
    rotation="00:00",             # 每天午夜按日生成新日志文件
    retention="10 days",          # 最长保留日志文件时间为10天
    compression="zip",            # 日志文件压缩格式（可选 gzip, bz2, zip, tar 等）
    level=settings.LOG_LEVEL,                 # 日志级别，INFO 以上的日志会被记录
    format=formatter,  # 日志格式
    enqueue=True,                 # 使用队列来异步写日志，防止多线程/多进程冲突
    backtrace=True,               # 记录回溯信息（调试时有用）
    diagnose=True,                 # 更详细的异常诊断信息
    filter=lambda record: record["extra"].get("application") == "admin"  # 只记录 application="api" 的日志
)

logger.add(
    settings.API_ADMIN_LOG_PATH,                # 日志文件路径，可以包含时间格式
    rotation="00:00",             # 每天午夜按日生成新日志文件
    retention="10 days",          # 最长保留日志文件时间为10天
    compression="zip",            # 日志文件压缩格式（可选 gzip, bz2, zip, tar 等）
    level=settings.LOG_LEVEL,                 # 日志级别，INFO 以上的日志会被记录
    format=formatter,  # 日志格式
    enqueue=True,                 # 使用队列来异步写日志，防止多线程/多进程冲突
    backtrace=True,               # 记录回溯信息（调试时有用）
    diagnose=True,                 # 更详细的异常诊断信息
    filter=lambda record: record["extra"].get("application") == "api"  # 只记录 application="api" 的日志
)

# 示例代码 - 分别记录 api 和 admin 的日志
def log_api_event(message):
    logger.bind(application="api").info(message)

def log_admin_event(message):
    logger.bind(application="admin").info(message)

